package exception;

/**
 * throw关键字
 * 主动抛出异常，直接编写在语句之中
 * throw new ArithmeticException();
 *
 * throws关键字
 * 在方法声明上使用，并且的告诉用户本方法可能产生的异常，同时该方法可能不处理此异常
 * 同时抛出多个异常则用逗号隔开
 * */
public class ThrowAndThrowsDemo {
    public static void test1() {
        throw new ArithmeticException();
    }

    public static void test2() throws ArithmeticException {
        // throws声明该方法可能抛出XXX异常，提醒调用者提供处理该异常的代码，否则编译不通过
    }

    public static void main(String[] args) {
        try {
            test1();
            test2();
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
    }

    /**
     * 子类重写超类含有throws声明异常抛出的方法时,对throws的重写规则
     * */
//    public void dosome()throws IOException, AWTException {}

    //允许子类方法仅抛出超类方法声明抛出异常的一部分
//    public void dosome()throws IOException {}

    //允许不再抛出任何异常
//    public void dosome(){}

    //允许抛出超类方法抛出异常的子类型异常
//    public void dosome()throws FileNotFoundException {}

    //不允许抛出额外异常(超类方法没有声明抛出的,且与声明抛出的异常没有继承关系的)
//    public void dosome()throws SQLException {}

    //不允许抛出超类方法抛出异常的超类型异常
//    public void dosome()throws Exception {}
}
